package cn.dongqihong.framework.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 * Created by DongQihong on 2016/5/29.
 */
public class DateUtil {
    /**
     * 一天的毫秒数
     */
    public static final int MILLISECOND_OF_DAY = 86400000;
    /**
     * 日期时间格式
     */
    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    /**
     * 日期格式
     */
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    /**
     * 时间格式
     */
    public static final String TIME_FORMAT = "HH:mm:ss";

    /**
     * 将指定日期格化为指定的格式
     *
     * @param date   指定日期
     * @param format 日期格式
     * @return 日期字符串
     */
    public static String format(Date date, String format) {
        return new SimpleDateFormat(format).format(date);
    }

    /**
     * 日期推算
     *
     * @param field  运算的基准间隔,日期的哪部分
     * @param number 加上多少，为负数就是减去时间量
     * @param date   基准日期
     * @return 新的日期
     */
    public static Date dateAdd(int field, int number, Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(field, number);
        return calendar.getTime();
    }

    /**
     * 计算两个日期间的天数
     * <p>
     * 例：<br/>
     * 2015-09-03与2015-09-04差1天 2015-09-03 10:30:53与2015-09-04差0天
     * </p>
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 天数
     */
    public static long diffDays(Date startDate, Date endDate) {
        return (endDate.getTime() - startDate.getTime()) / MILLISECOND_OF_DAY;
    }

    /**
     * 两个日期间隔的月数
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 间隔月数
     */
    public static int diffMoth(Date startDate, Date endDate) {
        Calendar start = Calendar.getInstance();
        start.setTime(startDate);
        Calendar end = Calendar.getInstance();
        end.setTime(endDate);
        int c = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12 + end.get(Calendar.MONTH) - start.get(Calendar.MONTH);
        return c;
    }

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(diffMoth(sdf.parse("2016-05-30"), sdf.parse("2016-06-30")));
    }
}
